// 生产环境的插件
import type { Plugin } from 'vite'
import fs from "fs"
import * as electronBuilder from "electron-builder"
import path from "path"

// 编译成js 预防直接build报错
const buildBackground = () => {
    // electron主进程ts文件编译成js
    require('esbuild').buildSync({
        // 入口文件
        entryPoints: ['src/background.ts'],
        // 出口文件 
        outfile: 'dist/background.js',
        // 是否打包所有依赖
        bundle: true,
        // 环境
        platform: 'node',
        // 版本
        target: 'node18',
        external: ['electron'],
    })
}

// 打包需先等vite打包完毕 生成dist文件夹内有 index.html 文件   再去执行electron-builder打包
export const ElectronBuildPlugin = (): Plugin => {
    return {
        name: 'electron-build',
        // vite打包完毕会调用钩子
        closeBundle() {
            buildBackground()
            // electron-builder 需要指定 package.json 的 main 属性
            // 读取 package.json
            const packageJSON = JSON.parse(fs.readFileSync('package.json', 'utf-8'))
            packageJSON.main = 'background.js'
            // 写入dist目录
            fs.writeFileSync('dist/package.json', JSON.stringify(packageJSON, null, 4))
            // BUG electron-builder 打包会下载垃圾文件 如何预防？ 手动生成一个假的node_modules文件夹
            fs.mkdirSync('dist/node_modules') // 创建一个空的node_modules文件夹

            // 打包配置
            electronBuilder.build({
                config: {
                    directories: {
                        // 输出文件到根目录 通过process.cwd
                        output: path.resolve(process.cwd(), 'release'),
                        // 打包基于dist目录
                        app: path.resolve(process.cwd(), 'dist')
                    },
                    // 打包压缩 提升效率
                    asar: true,
                    productName: "vite-electron",
                    // 安装配置
                    nsis: {
                        // 取消一键安装
                        oneClick: false,
                        // 允许用户手动选择安装目录
                        allowToChangeInstallationDirectory: true
                    },
                    // win: {
                    //     target: "nsis",
                    //     icon: "./public/wicon.png",
                    // },

                    // 执行打包会因为网络问题报错 解决详情：https://www.jianshu.com/p/2addf336ab91
                }
            })
        }
    }
}